/*
 * consola.c
 *
 *  Created on: 25/10/2011
 *      Author: Normandia
 */

#include "comandos_consola.h"

void consola_handler(char* cmd, char** args) {

	if(!strcmp(cmd,"fsinfo")) {
		fsinfo_fun();
		return;
	}

	if(!strcmp(cmd,"finfo")) {
		if(!args[0]) {
			printf("ERROR! falta un parámetro");
			return;
		}
		finfo_fun(args[0]);
		return;
	}

	printf("Mandaste cualquiera, man");
}

void fsinfo_fun() {

	uint64_t clusters_ocupados, clusters_libres, tamano_sector, tamano_cluster, tamano_fat;
	printf("---------------------------------\n");
	printf("---Información del Filesystem:---\n");
	printf("---------------------------------\n\n");

	clusters_libres = collection_queue_size(ptrListaSectLibre);
	clusters_ocupados = cache_boot_sector->n_sectors_ext / cache_boot_sector->n_sectors_per_cluster - clusters_libres;
	tamano_sector = cache_boot_sector->n_bytes_per_sector;
	tamano_cluster = tamano_sector * cache_boot_sector->n_sectors_per_cluster;
	tamano_fat = tamano_sector * cache_boot_sector->n_sectors_ext / 1024;

	printf("* %u clusters ocupados\n", clusters_ocupados);
	printf("* %u clusters libres\n",clusters_libres);
	printf("* %u bytes por sector\n", tamano_sector);
	printf("* %u bytes por cluster\n", tamano_cluster);
	printf("* %u kilobytes de FAT\n", tamano_fat);

}

void finfo_fun(char* path) {

	uint8_t i;
	uint32_t n_cluster;
	OPENFILE* res;

	res = getArchivoTD(path);
	if(!res) {
		printf("No se ha encontrado el archivo");
		return;
	}

	printf("----------------------------------\n");
	printf("-----Información del Archivo:-----\n");
	printf("----------------------------------\n\n");

	n_cluster = res->primerCluster;

	if(n_cluster == 0 || res->size == 0){
		printf("El archivo no tiene clusters asociados\n");
		return;
	}

	for(i=0;i<20;i++){ // Hay que mostrar como máximo los primeros 20 clusters

		printf("%u ",n_cluster);

		n_cluster = obtenerSigCluster(n_cluster);

		if(n_cluster > 0x0FFFFFEF)
			break;
	}
	printf("\n");

}
